package design_pattern.singleton;

/**
 * 单例模式————懒汉式（解决线程不安全问题）
 * 指调用getInstance()方法时才会被创建，在getInstance()方法内部进行实例化
 * 但是在多线程中，懒汉式不能保证是单例模式
 * 使用DCL（double check locking）机制,双检查锁
 *
 * @author corn
 * @create 2021-03-2313:48
 */
public class LazySingletonDemo2 {
    private static LazySingletonDemo2 lazySingletonDemo2;

    private LazySingletonDemo2() {
    }

    public static LazySingletonDemo2 getInstance() {
        //延迟加载
        if (lazySingletonDemo2 == null) {
            //使用同步锁＋DCL机制
            synchronized (LazySingletonDemo2.class) {
                if (lazySingletonDemo2 == null) {
                    lazySingletonDemo2 = new LazySingletonDemo2();
                }
            }

        }
        return lazySingletonDemo2;
    }
}
